#ifndef SOCK_H
#define SOCK_H
#include "common.h"

typedef struct {
	char *buf;
	int offset;
	int size;
	WPF *handler;
	void *arg;
	event_t *ev;
}mem_write_state;

typedef struct {
	int in_fd;
	int out_fd;
	int offset;
	int size;
	int size_send;
	WPF *callback;
	void *data;
	event_t *ev;
}sendfile_state;


extern void sock_cork_set(int fd);
extern int sock_open(int reuse, int noblck);
extern void sock_close(int fd);
extern void sock_listen(int fd, int queue);
extern int sock_accept(int fd, struct sockaddr *addr, int size);
extern int sock_bind(int fd, struct sockaddr *addr, int addr_size);
extern int error_ignore(int error_no) ;
extern int sock_noblocking_set(int fd);
extern void sock_write(event_t *ev, int fd, WPF *handler, void *arg, buffer_t *s);
extern void sock_reuseaddr(int fd);
extern void sock_sendfile(event_t *ev, int in, int out, int offset, int size, WPF *callback, void *data);

#endif
